package com.common.utils;

public class NumberUtil {

    private static String[] FALSE_STRINGS = { "false", "null", "nul", "off", "no", "n" };

    /**
     * 字符串转换成boolean. 转换规则如下: 如果字符串看起来像一个整数, 且整数值等于0, 则为false, 否则true;
     * 如果字符串为空串或null, 则返回指定默认值; 如果字符串为下列值之一(大小写不敏感): "false", "null", "nul",
     * "off", "no", "n" 则为false, 否则为true.
     *
     * @param str 字符串
     * @param defaultValue 默认值
     * @return Boolean
     */
    public static Boolean asBoolean(String str, Boolean defaultValue) {
        try {
            str = str.trim();
            return Integer.decode(str).intValue() != 0 ? Boolean.TRUE : Boolean.FALSE;
        } catch (NullPointerException e) {
            return defaultValue;
        } catch (NumberFormatException e) {
            if (str.equals("")) {
                return defaultValue;
            }
            for (int i = 0; i < FALSE_STRINGS.length; i++) {
                if (str.equalsIgnoreCase(FALSE_STRINGS[i])) {
                    return Boolean.FALSE;
                }
            }
            return Boolean.TRUE;
        }
    }
    /**
     * 字符串转换成boolean. 转换规则如下: 如果字符串看起来像一个整数, 且整数值等于0, 则为false, 否则true;
     * 如果字符串为空串或null, 则返回指定默认值; 如果字符串为下列值之一(大小写不敏感): "false", "null", "nul",
     * "off", "no", "n" 则为false, 否则为true.
     *
     * @param str 字符串
     * @param defaultValue 默认值
     * @return boolean
     */
    public static boolean asBoolean(String str, boolean defaultValue) {
        try {
            str = str.trim();
            return Integer.decode(str).intValue() != 0;
        } catch (NullPointerException e) {
            return defaultValue;
        } catch (NumberFormatException e) {
            if (str.equals("")) {
                return defaultValue;
            }
            for (int i = 0; i < FALSE_STRINGS.length; i++) {
                if (str.equalsIgnoreCase(FALSE_STRINGS[i])) {
                    return false;
                }
            }
            return true;
        }
    }
    /**
     * 字符串转换成long. 如果字符串为null, 字符串不是整数或整数超过取值范围, 则返回0.
     *
     * @param str 字符串
     * @return long
     */
    public static long asLong(String str) {
        return asLong(str, 0L);
    }
    /**
     * 字符串转换成long. 如果字符串为null, 字符串不是整数或整数超过取值范围, 则返回指定默认值.
     *
     * @param str 字符串
     * @param defaultValue 默认值
     * @return Long
     */
    public static Long asLong(String str, Long defaultValue) {
        try {
            return Long.decode(str.trim());
        } catch (NullPointerException e) {
            return defaultValue;
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }
    /**
     * 字符串转换成long. 如果字符串为null, 字符串不是整数或整数超过取值范围, 则返回指定默认值.
     *
     * @param str 字符串
     * @param defaultValue 默认值
     * @return long
     */
    public static long asLong(String str, long defaultValue) {
        try {
            return Long.decode(str.trim()).longValue();
        } catch (NullPointerException e) {
            return defaultValue;
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }
    public static Integer asInteger(String str) {
        return asInteger(str, 0);
    }
    /**
     * 字符串转换成int. 如果字符串为null, 字符串不是整数或整数超过取值范围, 则返回指定默认值.
     *
     * @param str 字符串
     * @param defaultValue 默认值
     * @return Integer
     */
    public static Integer asInteger(String str, Integer defaultValue) {
        try {
            return Integer.decode(str.trim());
        } catch (NullPointerException e) {
            return defaultValue;
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }
    /**
     * 字符串转换成int. 如果字符串为null, 字符串不是整数或整数超过取值范围, 则返回指定默认值.
     *
     * @param str 字符串
     * @param defaultValue 默认值
     * @return int
     */
    public static int asInteger(String str, int defaultValue) {
        try {
            return Integer.decode(str.trim()).intValue();
        } catch (NullPointerException e) {
            return defaultValue;
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }

    public static short asShort(String str) {
        try {
            return Short.decode(str.trim()).shortValue();
        } catch (NullPointerException e) {
            return 0;
        } catch (NumberFormatException e) {
            return 0;
        }
    }




    public static float asFloat(String str) {
        return  asFloat(str, 0.0f);
    }
    /**
     * 字符串转换成float. 如果字符串为null, 字符串不是整数或整数超过取值范围, 则返回指定默认值.
     *
     * @param str 字符串
     * @param defaultValue 默认值
     * @return float
     */
    public static Float asFloat(String str, float defaultValue) {
        return asFloat(str, defaultValue, 5);
    }

    /**
     * 字符串转换成float. 如果字符串为null, 字符串不是整数或整数超过取值范围, 则返回指定默认值.
     *
     * @param str 字符串
     * @param defaultValue 默认值
     * @return float
     */
    public static Float asFloat(String str, float defaultValue,int length) {
        try {
            int pos=str.indexOf(".");
            if(pos>-1){
                String tmp=str.substring(pos+1);
                if(tmp.length()>length){
                    tmp=tmp.substring(0,length);
                }
                str=str.substring(0,pos)+"."+tmp;
            }
            return Float.valueOf(str);
        } catch (NullPointerException e) {
            return defaultValue;
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }
}